#ifndef __APP_MASSAGE_H__
#define __APP_MASSAGE_H__

#include "Common_Config.h"
#include "Driver_LPTIM16.h"
#include "FreeRTOS.h"
#include "Inf_Pump.h"
#include "Inf_SolenoidValve.h"
#include "task.h"

#define MASSAGE_MAX_TIME         (15 * 60 * 10) /* 15min, 乘以10是因为中断触发时100ms触发一次 */
#define VTASK_DELAY_COMPENSATION 0              /* vTask_Delay()延时存在时间短的问题, 使用补偿 */

typedef enum
{
    MASSAGE_MODEL_WAVE = 2,

    MASSAGE_MODEL_PULSE,

    MASSAGE_MODEL_STRETCH,  // 伸展

    MASSAGE_MODEL_LOIN,     // 腰部

    MASSAGE_MODEL_SHOULDER, // 肩部

    MASSAGE_MODEL_MAX

} MassageModel_e;

typedef enum
{
    MAESSAGE_GEAR_LOW = 2000 + VTASK_DELAY_COMPENSATION,

    MAESSAGE_GEAR_MIDDLE = 4000 + VTASK_DELAY_COMPENSATION,

    MAESSAGE_GEAR_HIGH = 6000 + VTASK_DELAY_COMPENSATION,

    MAESSAGE_GEAR_MAX = 8000 + VTASK_DELAY_COMPENSATION

} MassageGear_e;

typedef struct
{
    /* 按摩模式, 默认波浪模式 */
    MassageModel_e massageModel;

    /* 按摩挡位, 默认中档 */
    MassageGear_e massageGear;

    /* 是否开启按摩 */
    bool isMassageOn;

    /* 是否切换模式 */
    bool isModelShift;

    /* 按摩剩余时间 */
    uint32_t massageResidueTime;

} Massage;

/* 改变方式 */
typedef enum
{
    /* 递增 */
    CHANGE_WAY_INCREASE = 0,

    /* 递减 */
    CHANGE_WAY_DECREASE
} ChangeWay_e;

extern Massage massageConfig;

/**
 * @brief 初始化按摩模块
 *
 */
void App_Massage_Init(void);

/**
 * @brief 启动按摩
 *
 */
void App_Massage_Start(void);

/**
 * @brief 停止按摩
 *
 */
void App_Massage_Stop(void);

/**
 * @brief 切换按摩模式
 *
 * @param changeWay 递增or递减
 */
void App_Massage_ModelShift(ChangeWay_e changeWay);

/**
 * @brief 切换按摩挡位
 *
 * @param changeWay 递增or递减
 */
void App_Massage_GearShift(ChangeWay_e changeWay);

#endif
